package agencia;

import java.util.Collection;
import java.util.Date;
import java.util.LinkedList;


public abstract class Paquete {
	
	private Date fecha;
	private Temporada temporada;	
	protected Collection<ReservaHotelPaquete> hoteles;
	protected Collection<ReservaVueloPaquete> vuelos;
	protected PrecioPaquete precio;
	
	public Paquete(){
		hoteles = new LinkedList<ReservaHotelPaquete>();
		vuelos = new LinkedList<ReservaVueloPaquete>();
		precio = new PrecioPaquete();
	}
	public Collection<ReservaHotelPaquete> getHoteles() {
		return hoteles;
	}
	public void setHoteles(Collection<ReservaHotelPaquete> hoteles) {
		this.hoteles = hoteles;
	}
	public Collection<ReservaVueloPaquete> getVuelos() {
		return vuelos;
	}
	public void setVuelos(Collection<ReservaVueloPaquete> vuelos) {
		this.vuelos = vuelos;
	}

	
	public double determinarPrecio(){
		return 0;
	}
	
	public int determinarLugaresLibres(){
		return 0;
	}
	
	private Date getFecha() {
		return fecha;
	}
	private void setFecha(Date fechas) {
		this.fecha = fechas;
	}
	public Date recuperarFecha(){
		return getFecha();
	}
	public void determinarFecha(Date fecha){
		setFecha(fecha);
	}

	public String recuperarTemporada()throws Error{
		if (temporada.toString().equals("")){
			Error e = new Error("Temporada no definida");
			throw e;
		}else{
		return temporada.toString();}
	}
	public void determinarTemporada(Temporada temporada)throws Error{
		
		
		try{
			this.temporada.Alta.compareTo(temporada);
			this.temporada.Media.compareTo(temporada);
			this.temporada.Baja.compareTo(temporada);
		}
		catch (Exception exc){
			Error e = new Error("Tipo de temporada invalido");
			throw e;}
		
	}
	
	protected void agregarHotel(ReservaHotelPaquete hotel){
		if (hoteles==null){
			hoteles = new LinkedList<ReservaHotelPaquete>();
			hoteles.add(hotel);
		}else{
		hoteles.add(hotel);
		}
	}
	
	
	public LinkedList<Vuelo> getVuelosPorCiudadesFechas(String ciudadOrigen, String ciudadDestino, Date fechaVuelo){
		
		LinkedList<Vuelo> listaVuelos = new LinkedList<Vuelo>();
		
		return listaVuelos;
		
	}
	public LinkedList<Hotel> getHotelesPorCiudadFecha(Lugar lugar, Date fecha){
		
		LinkedList<Hotel> listaHoteles = new LinkedList<Hotel>();
		
		return listaHoteles;
		
	}
	
}

///**
// * Setter of the property <tt>planDePago</tt>
// *
// * @param planDePago The planDePago to set.
// *
// */
//public void setPlanDePago(PlanDePago planDePago ){
//	this.planDePago = planDePago;
//}
///**
// * Getter of the property <tt>planDePago</tt>
// *
// * @return Returns the planDePago.
// * 
// */
//public PlanDePago getPlanDePago()
//{
//	return planDePago;
//}
///**
// * Setter of the property <tt>planDePago</tt>
// *
// * @param planDePago The planDePago to set.
// *
// */
//public void setPlanDePago(PlanDePago planDePago ){
//	this.planDePago = planDePago;
//}
///**
// * Getter of the property <tt>planDePago</tt>
// *
// * @return Returns the planDePago.
// * 
// */
//public PlanDePago getPlanDePago()
//{
//	return planDePago;
//}
///**
// * Setter of the property <tt>planDePago</tt>
// *
// * @param planDePago The planDePago to set.
// *
// */
//public void setPlanDePago(PlanDePago planDePago ){
//	this.planDePago = planDePago;
//}
///**
// * Getter of the property <tt>planDePago</tt>
// *
// * @return Returns the planDePago.
// * 
// */
//public PlanDePago getPlanDePago()
//{
//	return planDePago;
//}